HTMLify

app.js
Views: 45 | Author: cody
const roadArea = document.querySelector('.road');
let player = { step: 5 };
let keys = { ArrowUp: false, ArrowDown: false, ArrowRight: false, ArrowLeft: false }
let score = 0;
const startBtn = document.querySelector(".btn")
document.addEventListener('keydown', keyDown);
document.addEventListener('keyup', keyUp);

function keyDown(event) {
    keys[event.key] = true;
}
function keyUp(event) {
    keys[event.key] = false;
}


function moveLines() {
    let lines = document.querySelectorAll('.lines');
    lines.forEach(item => {
        if (item.y >= 700) {
            item.y = item.y - 750;
        }
        item.y = item.y + player.step;
        item.style.top = item.y + 'px';
    });
}

function moveEnemies(playercar) {
    let vehicles = document.querySelectorAll('.enemies');
    let playercarb = playercar.getBoundingClientRect();


    vehicles.forEach(item => {
        othercarb = item.getBoundingClientRect();
        if (!((playercarb.bottom < othercarb.top) || (playercarb.top > othercarb.bottom) || (playercarb.left > othercarb.right) || (playercarb.right < othercarb.left))) {
            // alert("Press OK to play again");
            alert("The Final Score is " + (score) + "\n Press OK to play again");
            location.reload()
            player.start = false;
        }
        if (item.y >= 815) {
            // Player will earn score when the car will pass enemy car
            score = score + 1;
            startBtn.innerHTML = "Score: " + score;
            item.y = -300;
            item.style.left = Math.floor(Math.random() * 350) + 'px';
        }
        item.y = item.y + player.step;
        item.style.top = item.y + 'px';
    })
}


function playArea() {


    let playercar = document.querySelector('.car');
    let road = roadArea.getBoundingClientRect();
    if (player.start) {
        moveLines();
        moveEnemies(playercar);
        if (keys.ArrowUp && player.y > (road.top + 80)) {
            //we're seeing if the up arrow is pressed then player should not exceed the road top 
            player.y = player.y - player.step;
        }

        if (keys.ArrowDown && player.y < (road.bottom - 150)) {
            player.y = player.y + player.step;
        }

        if (keys.ArrowLeft && player.x > 0) {
            player.x = player.x - player.step;
        }

        if (keys.ArrowRight && player.x < (road.width - 64)) {
            player.x = player.x + player.step;
        }

        //based on left and right we assign position to our car i.e player

        playercar.style.top = player.y + 'px';
        playercar.style.left = player.x + 'px';
        window.requestAnimationFrame(playArea);
    }
}

function init() {

    player.start = true;
    window.requestAnimationFrame(playArea);



    //similarly we're creating lines for the road
    for (let i = 0; i < 5; i++) {
        let roadlines = document.createElement('div');
        roadlines.setAttribute('class', 'lines');
        // as height of single line is 100 px and we want to add gap of 50 px
        roadlines.y = i * 150;

        // and then adding that height to the top 
        roadlines.style.top = roadlines.y + 'px';
        roadArea.appendChild(roadlines);

    }

    // we're creating player car dynamically and then adding it to our road area
    let playercar = document.createElement('div');
    playercar.setAttribute('class', 'car');
    roadArea.appendChild(playercar);

    //we're setting our player's dimensinos same as our car's so we're using playercar dimensions 
    player.x = playercar.offsetLeft;
    player.y = playercar.offsetTop;


    //creating enemies 

    for (x = 0; x < 4; x++) {
        let enemies = document.createElement('div');
        enemies.setAttribute('class', 'enemies');
        enemies.y = ((x + 1) * 350) * -1;
        enemies.style.top = enemies.y + 'px';

        //width of road is 400 , 50 is of car 
        enemies.style.left = Math.floor(Math.random() * 350) + 'px';
        roadArea.appendChild(enemies);
    }
}

function startgame() {
    document.querySelector(".push").style.border = "5px solid rgb(86,50,57)";
    startBtn.style.backgroundColor = "rgb(86,50,57)";
    startBtn.style.cursor = "not-allowed";
    startBtn.innerHTML = "Use Arrow keys to Navigate";
    init();
}

Comments